perm filename SCAN.MAC[LSP,SYS] blob
sn#091908 filedate 1974-03-15 generic text, type C, neo UTF8
COMMENT ā VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE SCAN -- GENERAL PURPOSE ADAPTER FOR LISP SCANNER
C00004 00003
C00006 00004
C00008 ENDMK
Cā;
TITLE SCAN -- GENERAL PURPOSE ADAPTER FOR LISP SCANNER
A=1
B=2
C=3
R=13
T=6
P=14
CR=15
LF=12
TAB=11
IGCRLF=32
INUM0=577777
OPDEF CALLF [36B8]
EXTERNAL CHRTAB,IGSTRT,RATOM,OLDCH,FIX1A,NOINFG,SCNVAL,READ,NUMVAL
INTERNAL SCAN,UNTYI,SCANSET,SCANRESET,SCANINIT,LETTER,IGNORE,SREAD
INTERNAL SCANFNSET,DELLIM,MODCHR
SCANFNSET:
MOVEM 1,SCNFN#
POPJ P,
SCAN: SETOM NOINFG
PUSHJ P,RATOM
SKIPA
PUSHJ P,FIX1A
MOVEM A,SCNVAL
MOVEI A,INUM0(R)
SKIPN C,SCNFN ;MONITORING INPUT?
JRST CPOPJ
MOVE B,SCNVAL
CALLF 2,(C) ;(RETURN SCANFN TYPE VAL)
CPOPJ: POPJ P,
UNTYI: SUBI A,INUM0
MOVEM A,OLDCH
JRST FIX1A
OLDSCN: IGCRLF ;IGSTRT
LF ;IGEND
POINT 4,CHRTAB(A),5 ;RATFLD
POINT 2,CHRTAB(A),10 ;STRFLD
POINT 3,CHRTAB(A),13 ;IDFLD
IGST2: 0 ;IGSTRT
IGEND2: 0 ;IGEND
RATF2: POINT 4,CHRTAB(A),29 ;RATFLD
STRF2: POINT 2,CHRTAB(A),31 ;STRFLD
IDF2: POINT 3,CHRTAB(A),34 ;IDFLD
SCANSET: SKIPA A,[XWD IGST2,IGSTRT]
SCANRESET: MOVE A,[XWD OLDSCN,IGSTRT]
BLT A,IGSTRT+4
FALSE: MOVEI A,0
POPJ P,
SCANINIT: SUBI A,INUM0
SUBI B,INUM0
SUBI C,INUM0
SUBI C+1,INUM0
SUBI C+2,INUM0
MOVEM A,IGST2 ;IGSTRT
MOVEM B,IGEND2 ;IGEND
PUSH P,C ;STRBEG
PUSH P,C+1 ;STREND
PUSH P,C+2 ;SLASHIFY
MOVEI B,2
MOVEI C,3
MOVEI A,176
DPB B,RATF2
DPB C,STRF2
DPB B,IDF2
SOJG A,.-3
MOVE A,[XWD "A"-"Z"-1,"A"]
MOVEI B,5
MOVEI C,4
DPB B,RATF2
DPB C,IDF2
AOBJN A,.-2
MOVE A,[XWD "a"-"z"-1,"a"]
DPB B,RATF2
DPB C,IDF2
AOBJN A,.-2
MOVE A,[XWD "0"-"9"-1,"0"]
MOVEI B,8
DPB B,RATF2
DPB C,IDF2
AOBJN A,.-2
POP P,A ;SLASHIFY
MOVEI B,3
DPB B,IDF2
DPB C,RATF2
POP P,A ;STREND
MOVEI B,2
DPB B,STRF2
POP P,A ;STRBEG
MOVEI B,9
DPB B,RATF2
MOVE A,IGST2
MOVEI B,0
DPB B,RATF2
DPB B,STRF2
DPB B,IDF2
MOVEI B,1
MOVEI A,0 ;NULL
DPB B,RATF2
DPB B,IDF2
DPB B,STRF2
MOVEI A,"."
MOVEI B,7
DPB B,RATF2
JRST FALSE
LETTER: SUBI A,INUM0
MOVEI B,5
MOVEI C,4
DPB C,IDF2
LET2: DPB B,RATF2
JRST FALSE
IGNORE: SUBI A,INUM0
MOVEI B,3
JRST LET2
DELLIM: SUBI A,INUM0 ;WHATEVER IT WAS IS NOW A DELIMITER
MOVEI B,2
JRST LET2
MODCHR: SUBI A,INUM0 ;CHAR TO BE MODIFIED
PUSH P,A
MOVE A,CHRTAB(A);NEW VALUE IS OLD, IF 2D ARG NIL
JUMPE B,JSTRET
MOVE A,B ;NEW TABLE ENTRY
PUSHJ P,NUMVAL ;GET REAL VALUE OF NEW VALUE
JSTRET: POP P,B ;CHAR BACK
EXCH A,CHRTAB(B);STORE NEW VALUE (OR OLD), RETURN OLD
JRST FIX1A ;RETURN LISPIFIED OLD VALUE
SREAD: MOVEI A,"," ;IGNORE COMMAS FOR AWHILE.
PUSHJ P,IGNORE+1
PUSHJ P,READ ;READ AN S-EXPRESSION.
PUSH P,A ;SAVE IT TEMPORARILY.
MOVEI A,","
MOVEI B,2
DPB B,RATF2 ;RESTORE COMMA AS A DELIMITER.
POP P,A
POPJ P,
END